﻿using System;

namespace InDepth2Demo.Chapter9
{
    /// <summary>
    /// 9.1 作为委托的 Lambda 表达式
    /// </summary>
    public class FirstLambda
    {
        //用一个匿名方法来创建委托实例
        public static void AnonyMethod()
        {
            Func<string, int> returnLength;
            returnLength = delegate (string text) { return text.Length; };              // 等号右边是匿名方法表达式，也是打算转换成 lambda 表达式的部分
            Console.WriteLine(returnLength("Hello"));
        }

        //冗长的第一个lambda表达式，和匿名方法相似
        public static void Lambda1()
        {
            Func<string, int> returnLength;
            returnLength = (string text) => { return text.Length; };            // 等号右边是 用于创建委托实例的表达式
            Console.WriteLine(returnLength("Hello"));
        }

        // 隐式类型的参数列表
        public static void Lambda2()
        {
            Func<string, int> returnLength;
            returnLength = (text) => { return text.Length; };            // 等号右边 简化了参数的类型，使用了隐式类型
            Console.WriteLine(returnLength("Hello"));
        }

        // 单一参数的快捷语法
        public static void Lambda3()
        {
            Func<string, int> returnLength;
            returnLength = text => { return text.Length; };            // 等号右边 如果lambda表达式只需一个参数，而该参数可以隐式指定类型，就允许省略圆括号
            Console.WriteLine(returnLength("Hello"));
        }
    }
}
